/* $Id da.xiao@nokia.com 2016-11-24 05:15 exp$ */
#include <errno.h>
#include <bolt.h>
#include <prot.h>
#include "basic.h"

BOLT(icmp_show, "icmp show")
{
   icmp_show();
}

BOLT(itool_send, "itool <id> send <type> <code> <number>")
{
  uint32_t num, id;
  uint8_t icmp_type,icmp_code; 
  int ret;

  if (!str2u32(pop_argz(), &num)){
    printf("invalid number\n");
    return;
  }

  if (!str2u8(pop_argz(), &icmp_code)){
    printf("invalid code\n");
    return;
  }

  if (!str2u8(pop_argz(), &icmp_type)){
    printf("invalid type\n");
    return;
  } 
   
  if (!str2u32(pop_argz(), &id)){
    printf("invalid id\n");
    return;
  }

  for(ret=0;num>0;num--) {
    if (itool_send((int )id,icmp_type,icmp_code) > 0)
       ret++;
    usleep(1);
  }
  printf("itool send num=%d\n", ret);
  
}

BOLT(itool_release, "itool <id> release")
{
	 uint32_t id;
   if (!str2u32(pop_argz(), &id)){
      printf("invalid id\n");
      return;
   } 
   itool_release((int)id);

}

BOLT(itool_show, "itool show")
{
	itool_show();
}

BOLT(itool_create, "itool <id> create <src-ip> <dst-ip>")
{
   uint32_t it_id;
   sockaddr_t src, dst;
   int id;
   
   memset(&src, 0, sizeof(src));
   memset(&dst, 0, sizeof(dst));

   if (!ip2addr(pop_argz(), &dst.v0)) {
      printf ("Invalid destination IP.\n");
      return;
   }
  
   if (!ip2addr(pop_argz(), &src.v0)) {
      printf ("Invalid source IP.\n");
      return;
   }

   if (!str2u32(pop_argz(), &it_id)){
      printf("invalid id\n");
      return;
   } 
   id=itool_create((int)it_id, &src, &dst);
   printf("The itool id is %d\n", id);
}

